package com.kang.service;

import java.util.List;

import com.kang.pojo.ItemDetail;
import com.kang.pojo.ReturnRequest;
import com.kang.pojo.ReturnRequestItem;
import com.vonechina.entity.page.ItemDetailPage;
import com.vonechina.entity.page.ReturnRequestPage;

/**
 * 退货申请服务层
 * 
 * @author zs614
 *
 */
public interface ReturnRequestService {
	/**
	 * 分页查询退货申请
	 * 
	 * @param page
	 *            搜索条件实体类
	 * @return
	 */
	public List<ReturnRequest> listReturnRequest(ReturnRequestPage page);

	/**
	 * 生成退货申请编号
	 * 
	 * @return
	 */
	public String generateReturnRequestCode();

	/**
	 * 通过主键查询退货申请
	 * 
	 * @param returnRequestID
	 *            退货申请ID
	 * @return
	 */
	public ReturnRequest selectReturnRequestByID(Integer returnRequestID);

	/**
	 * 新增退货申请
	 * 
	 * @param request
	 *            退货申请雪铁龙
	 * @return
	 */
	public int insertReturnRequest(ReturnRequest request);

	/**
	 * 提交退货申请
	 * 
	 * @param request
	 *            退货申请实体类
	 * @return
	 */
	public int submitReturnRequest(ReturnRequest request);

	/**
	 * 更新退货申请
	 * 
	 * @param request
	 *            退货申请实体类
	 * @return
	 */
	public int updateReturnRequest(ReturnRequest request);

	/**
	 * 删除退货申请
	 * 
	 * @param returnRequestID
	 *            退货申请ID
	 * @return
	 */
	public int deleteByPrimaryKey(Integer returnRequestID);

	/**
	 * 查询可退货物品批次
	 * 
	 * @param page
	 *            搜索条件实体类
	 * @return
	 */
	public List<ItemDetail> listItemDetailForReturn(ItemDetailPage page);

	/**
	 * 保存退货申请物品信息
	 * 
	 * @param returnRequestID
	 *            退货申请ID
	 * @param ids
	 *            退货申请批次ID
	 * @param numbers
	 *            退货申请物品数量
	 * @return
	 */
	public Integer saveReturnItem(Integer returnRequestID, Integer[] ids, Integer[] numbers);

	/**
	 * 查看退货申请物品信息
	 * 
	 * @param returnRequestID
	 *            退货申请ID
	 * @return
	 */
	public List<ReturnRequestItem> listItemByReturnRequestID(Integer returnRequestID);

	/**
	 * 检查数量是否足够退货
	 * 
	 * @param ids
	 *            物品批次ID
	 * @param numbers
	 *            退货数量
	 * @return
	 */
	public boolean checkItemNumberEnough(Integer[] ids, Integer[] numbers);

	/**
	 * 减少库存
	 * 
	 * @param ids
	 *            物品picID
	 * @param numbers
	 *            数量
	 * @return
	 */
	public int subtractStock(Integer[] ids, Integer[] numbers);

	/**
	 * 更新退货申请状态
	 * 
	 * @param returnRequestID
	 *            退货申请ID
	 * @param status
	 *            状态
	 * @return
	 */
	public int updateStatus(Integer returnRequestID, Integer status);

}
